package trabajadores;

import java.io.Serializable;
import clases.Fecha;


/** Clase abstracta que representa a un empleado
 * @author Ane
 *
 */
public abstract class Empleado implements Serializable{
		

	private static final long serialVersionUID = 1L;
	protected String nombre;
	protected String apellidos;
	protected String dni;
	protected long telefono;
	protected String direccion;
	protected Fecha fechaNacimiento;
	protected TipoEmpleados tipo;
	
	
	/** Constructor vacio
	 * 
	 */
	public Empleado() {
		this.nombre = "";
		this.apellidos = "";
		this.dni = "";
		this.telefono = 0;
		this.direccion = "";
		this.fechaNacimiento = null;
		this.tipo = null;
	}
	
	
	/** Constructor con parametros
	 * @param nombre El nombre del empleado
	 * @param apellidos Los apellidos 
	 * @param dni El dni
	 * @param telefono El telefono
	 * @param direccion La direccion
	 * @param fechaNacimiento La fecha de nacimiento
	 * @param tipo El tipo de empleado que se trate
	 */
	public Empleado(String nombre, String apellidos, String dni,
			long telefono, String direccion, Fecha fechaNacimiento, TipoEmpleados tipo) {
		this.nombre = nombre;
		this.apellidos = apellidos;
		this.dni = dni;
		this.telefono = telefono;
		this.direccion = direccion;
		this.fechaNacimiento = fechaNacimiento;
		this.tipo = tipo;
	}
	

	/** Devuelve el nombre del empleado
	 * @return nombre Nombre del empleado
	 */
	public String getNombre() {
		return nombre;
	}
	
	/** Modifica el nombre del empleado
	 * @param nombre Nombre del empleado
	 */
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	/** Devuelve los apellidos del empleado
	 * @return apellidos Los apellidos del empleado
	 */
	public String getApellidos() {
		return apellidos;
	}
	
	/** Modifica los apellidos del empleado
	 * @param apellidos Los apellidos del empleado
	 */
	public void setApellidos(String apellidos) {
		this.apellidos = apellidos;
	}
	
	/** Devuelve el Dni del empleado
	 * @return dni Dni del empleado
	 */
	public String getDni() {
		return dni;
	}
	
	/** Modifica el Dni del empleado
	 * @param dni Dni del empleado
	 */
	public void setDni(String dni) {
		this.dni = dni;
	}

	/** Devuelve el numero de telefono del empleado
	 * @return telefono El numero de telefono
	 */
	public long getTelefono() {
		return telefono;
	}
	
	/** Modifica el numero de telefono del empleado
	 * @param telefono El numero de telefono 
	 */
	public void setTelefono(long telefono) {
		this.telefono = telefono;
	}
	
	/** Devuelve la direccion del empleado
	 * @return direccion La direccion
	 */
	public String getDireccion() {
		return direccion;
	}
	
	/** Modifica la direccion del empleado
	 * @param direccion La direccion
	 */
	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}
	
	/** Devuelve la fecha de nacimiento
	 * @return fechaNacimiento La fecha de nacimiento
	 */
	public Fecha getFechaNacimiento() {
		return fechaNacimiento;
	}
	
	/** Modifica la fecha de nacimiento
	 * @param fechaNacimiento La fecha de nacimiento
	 */
	public void setFechaNacimiento(Fecha fechaNacimiento) {
		this.fechaNacimiento = fechaNacimiento;
	}
	
	/** Devuelve el tipo de empleado
	 * @return tipo El tipo 
	 */
	public TipoEmpleados getTipo() {
		return tipo;
	}
	
	/** Modifica el tipo de empleado
	 * @param tipo El tipo
	 */
	public void setTipo(TipoEmpleados tipo) {
		this.tipo = tipo;
	}

	
	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	public String toString() {
		return "Empleado --  Nombre: " + nombre +" "+ apellidos + ", Dni: " + dni
		+ ", Numero de telefono: " + telefono + ", Direccion: " + direccion 
		+" y fecha de nacimiento: " + fechaNacimiento;
	}
	
	/** Metodo abstracto implementado en las hijas de esta clase
	 * 	que calcula el salario de cada empleado 
	 */
	public abstract void calcularSalario();

	
}